package org.eda2;

import static org.junit.Assert.*;

import java.io.File;
import java.io.FileNotFoundException;
import org.eda2.Generador;
import org.eda2.InOut;
import org.junit.Before;
import org.junit.Test;

/**
 * The Class InOutTestJUnit4. Clase de pruebas de lecturas y escrituras de los
 * ficheros de usuarios.
 */
public class InOutTestJUnit4 {

	/** The input directory. */
	String inputDirectory;

	/** The numeroDeUsuarios. */
	int numeroDeUsuarios;

	/**
	 * Sets the up.
	 * 
	 * @throws Exception
	 *             the exception
	 */
	@Before
	public void setUp() throws Exception {
		inputDirectory = System.getProperty("user.dir");
		inputDirectory = inputDirectory + File.separator + "src"
				+ File.separator + "org" + File.separator + "eda2"
				+ File.separator + "entradas" + File.separator;

		numeroDeUsuarios = 40000; // Crear datos con numeroDeUsuarios...
	}

	/**
	 * Test lectura correcta. Test, que controla que el fichero de usuarios no
	 * contiene ningun error.
	 * 
	 * @throws FileNotFoundException
	 *             the file not found exception
	 */
	@Test
	public void testLecturaCorrecta() throws FileNotFoundException {
		String inputFile = "datoseda.txt";
		inputFile = inputDirectory + inputFile;
		InOut entrada = new InOut(inputFile);
		entrada.readFile();
		System.out.println("Errores encontrados: "+entrada.getError());
		assertFalse(entrada.getError().size() >= 1);

	}

	/**
	 * Test lectura error2. Test, que controla que el fichero de usuarios
	 * contiene un error de tipo 2.
	 * 
	 * @throws FileNotFoundException
	 *             the file not found exception
	 */
	@Test
	public void testLecturaError2() throws FileNotFoundException {
		String inputFile = "datosedaError1.txt";
		inputFile = inputDirectory + inputFile;
		InOut entrada = new InOut(inputFile);
		entrada.readFile();
		assertTrue(entrada.getError().contains(2));
	}

	/**
	 * Test lectura error1. Test, que controla que el fichero de usuarios
	 * contiene un error de tipo 1.
	 * 
	 * @throws FileNotFoundException
	 *             the file not found exception
	 */
	@Test
	public void testLecturaError1() throws FileNotFoundException {
		String inputFile = "datosedaError2.txt";
		inputFile = inputDirectory + inputFile;
		InOut entrada = new InOut(inputFile);
		entrada.readFile();
		assertTrue(entrada.getError().contains(1));
	}

	/**
	 * Test lectura error3. Test, que controla que el fichero de usuarios
	 * contiene un error de tipo 3.
	 * 
	 * @throws FileNotFoundException
	 *             the file not found exception
	 */
	@Test
	public void testLecturaError3() throws FileNotFoundException {
		String inputFile = "datosedaError3.txt";
		inputFile = inputDirectory + inputFile;
		InOut entrada = new InOut(inputFile);
		entrada.readFile();
		assertTrue(entrada.getError().contains(3));
	}

	/**
	 * Test lectura error multiples. Test, que controla que el fichero de
	 * usuarios contiene mas de un error.
	 * 
	 * @throws FileNotFoundException
	 *             the file not found exception
	 */
	@Test
	public void testLecturaErrorMultiples() throws FileNotFoundException {
		String inputFile = "datosedaErrorMultiple.txt";
		inputFile = inputDirectory + inputFile;
		InOut entrada = new InOut(inputFile);
		entrada.readFile();
		assertTrue(entrada.getError().size() > 1);
	}

	/**
	 * Test generadorArchivos. Test que nos sirve para generar datos aleatorios.
	 * 
	 * @throws FileNotFoundException
	 */
	@Test
	public void generadorArchivos() throws FileNotFoundException {
		String inputFile = "datosAleatorios";
		new Generador(inputFile, numeroDeUsuarios);
	}
}
